MENTAL, LA UNIÓN DE
SINTAXIS Y SEMÁNTICA

“Todo es semántica” (Anna Wierzbicka)

“La verdadera esencia de la lingüística es la búsqueda del significado” (Benjamin Lee Whorf)

“Todos los significados vienen de analogías” (Douglas Hofstadter)



Sintaxis vs. Semántica

Sintaxis y semántica son dos aspectos de la conciencia lingüística. La sintaxis corresponde al aspecto superficial, a la forma, a lo exterior. La semántica corresponde al fondo, a lo profundo, a lo interior. Estos dos aspectos están conectados o relacionados:
Sintaxis Abstracta

La sintaxis abstracta pretende describir la estructura de los lenguajes ignorando los detalles de representación final, centrándose en los mecanismos esenciales de estructuración de la información, es decir, en la esencia de la sintaxis de todos los lenguajes informáticos.

Por el contrario, la sintaxis concreta describe con todo detalle la apariencia externa de todos los elementos del lenguaje, incluyendo muchos detalles irrelevantes (palabras clave, símbolos utilizados, signos de puntuación, etc.). Es decir, es una especificación superficial, de detalle.

La noción de sintaxis abstracta fue presentada por John McCarthy en relación con el desarrollo del lenguaje Lisp y su aplicación a la teoría de la computación [McCarthy, 1963, 1963-a].

Según McCarthy [1963], “una sintaxis abstracta es todo lo que se necesita para traducir un lenguaje o para definir su semántica”.

Según Bertrand Meyer [1990], “El uso de la sintaxis abstracta más que el de la sintaxis concreta como base de los estudios de los lenguajes de programación es representativa de una importante tendencia en la ingeniería del software: el movimiento hacia una perspectiva de alto nivel de los objetos del software, enfatizando la estructura profunda más que las propiedades superficiales”.

A pesar de que la sintaxis abstracta captura sólo la sintaxis de un lenguaje, constituye la base para especificar la semántica, que es la parte más difícil de un lenguaje.

Una de las notaciones de la sintaxis abstracta es Metanot [Meyer, 1990]. Otra notación es la que utiliza VDM [Bjorner, 1982] [Jones, 1986]. Aquí vamos a seguir la de Metanot.


Tipos de producciones

Los tipos de producciones que se contemplan en una gramática abstracta son únicamente tres: agregados, alternancias y repeticiones.
  1. Producción tipo agregado.
    Define un elemento compuesto por un número fijo de componentes.

    Cada componente (que empieza por mayúscula) está precedido de una etiqueta (escrita en minúsculas) que hace referencia a su papel, categoría o tipo. Al estar identificado cada elemento componente por su etiqueta, el orden es irrelevante.

    Ejemplos:


    Los componentes iguales pero con diferente etiqueta se pueden agrupar:


    Puede haber producciones de un sólo componente:


    La notación de agregado es similar a la de registro, que consta de de una serie de campos compuestos de nombres y datos.

    La creación de una instancia concreta se hace, por ejemplo, así:


    que recuerda las llamadas a subrutinas con argumentos definidos por palabras clave, como en Smalltalk y Ada (en este último lenguaje también existe la notación posicional).

    El acceso a un componente se realiza mediante


    como en Pascal, C, Simula, Ada, PL/I y Eiffel. En el ejemplo Libro,


    En otros lenguajes, la notación varía (r indica registro y c campo):


  2. Producción tipo alternativo.
    Define un elemento mediante un conjunto de alternativas.
    Ejemplos:


    La creación de una instancia concreta se realiza mediante, por ejemplo:


    Si Asignación es, a su vez, un agregado definido mediante


    La creación de una instancia concreta de Asignación sería la siguiente:


  3. Producción de tipo repetitivo.
    Define un elemento mediante una secuencia construida con cero, una o más repeticiones de otro tipo de elemento.

    Ejemplo:


    El asterisco (o estrella de Kleene) indica secuencia de cero, uno o más elementos. Si la secuencia tiene al menos un elemento, el asterisco se reemplaza por el signo “+”.

    Ejemplo: Número ::= Dígito+ indica que un número es una secuencia de uno o más dígitos.

    El acceso al elemento i se realiza mediante Elemento(i). Por ejemplo, Número(3) es el tercer dígito de Número.

Analogía con la Programación Estructurada

Existe una analogía entre la Sintaxis Abstracta la Programación Estructurada:

Programación
Estructurada
Sintáxis
Abstracta
SecuenciaAgregado
SelecciónAlternancia
RepeticiónRepetición

En ambos casos se utilizan esencialmente los mismos mecanismos genéricos, con algunas diferencias:
Sintáxis y Semántica en MENTAL

Características
MENTAL vs. Sintaxis abstracta

La sintaxis abstracta tiene limitaciones. Solo cubre 3 aspectos de la estructuración de la información. Es un lenguaje incompleto, pues solo contempla aspectos descriptivos, y no los operativos. MENTAL, en cambio, es un lenguaje completo que contempla los aspectos descriptivos y operativos.

MENTAL va más allá de la sintaxis abstracta al unir sintaxis y semántica, al ser dos aspectos de una misma cosa: el aspecto superficial y profundo, respectivamente. La semántica es la base del lenguaje, que es del máximo nivel de abstracción. La sintaxis es un reflejo de la semántica, su aspecto superficial, manifestado.

Es posible, no obstante, expresar de manera simple e intuitiva, las estructuras de la sintaxis abstracta, por ejemplo:
  1. Agregado.

    libros = {("Don Quijote"/titulo Cervantes/autor) ("El Aleph"/titulo Borges/autor)}

    ⟨( autor(t) = ⟨(a ← (t/titulo a/autor)∈libros)⟩ )⟩

    autor("Don Quijote") // ev. Cervantes

    autor("El Aleph") // ev. Borges


  2. Alternativa.

    x∈(Manzana Naranja Pera) // sentencia declarativa

    Esta expresión equivale a
    (x = (Manzana ∨ Naranja ∨ Pera))
    (x es Manzana o Naranja o Pera)

  3. Repetición.

    (SentenciaCompuesta =: Sentencia★n) // una o más sentencias

    (S =: (A B C))

    S\2 // ev. B

    (Número = Dígito★n) // 1 o más dígitos

    n = 4578

    n\1 // ev. 4


Bibliografía